package com.jwmp.rbac.mapper;

import com.jwmp.core.util.QueryObject;
import com.jwmp.rbac.domain.Permission;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface PermissionMapper {
    /**
     * 查询所有权限，包括模块
     * @return
     */
    List<Permission> selectList(@Param("qo") QueryObject qo);

    /**
     * 查询满足条件的总记录数
     * @param qo 条件
     * @return
     */
    int selectCount(@Param("qo") QueryObject qo);

    /**
     * 根据权限表达式查询权限
     * @param expression    权限表达式
     * @return  全向对象，包括模块
     */
    Permission selectByExpression(@Param("expression") String expression);

    /**
     * 批量插入权限
     * @param list
     */
    void insertBath(@Param("moduleId") Long moduleId,@Param("list") List<Permission> list);

    /**
     * 批量删除某个角色下的权限
     * @param list
     */
    void deleteBath(@Param("roleId") Long roleId,@Param("list") List<Long> list);

    /**
     * 查询基本数据查询，不包含模块
     * @return
     */
    List<Permission> selectBaseList();

    /**
     * 根据角色 id 查找所有权限列表
     * @return
     */
    List<Permission> selectByRoleId(@Param("roleId") Long roleId);

    /**
     * 给角色授新的权限
     * @param roleId    要授权的角色id
     * @param permissionIdList  新的权限 id 列表
     */
    void authorizeForRole(@Param("roleId") Long roleId,@Param("permissionIdList") List<Long> permissionIdList);

    /**
     * 通过员工 id 获取所有的权限
     * @param empId 员工 id
     * @return
     */
    List<Permission> selectListByEmpId(@Param("empId") Long empId);
}
